一些常见数列的生成函数推导

一些常见数列的生成函数推导,URL是瞎打的

数列的生成函数可以涵盖原数列的很多信息。它可以用来代入求值化简一些级数的求和,也可以配合多项式全家桶使用以反求原数列。

本文仅仅给出了几个常见数列的生成函数的推导,并没有讲其他的内容,由于讲这玩意的博客非常多,大家去找几篇看就好了。

斐波那契数列F的生成函数

非常简单,就当热身吧。

递推式

Fn=Fn1+Fn2F_n=F_{n-1}+F_{n-2}

边界

F0=F1=1F_0=F_1=1

(注意,这里不是常见的F0=0F_0=0

通项式

Fn=ϕn+1(ϕ)n15,ϕ=5+12F_n=\frac{\phi^{n+1}-(-\phi)^{-n-1}}{\sqrt 5},\phi=\frac{\sqrt 5+1}{2}

生成函数

G(x)=n=0Fnxn=1+x+n=2(Fn1+Fn2)xn=1+xG(x)+x2G(x)=11xx2\begin{aligned} G(x)&=\sum_{n=0}^\infty F_nx^n\cr &=1+x+\sum_{n=2}^\infty (F_{n-1}+F_{n-2})x^n\cr &=1+xG(x)+x^2G(x)\cr &=\frac{1}{1-x-x^2} \end{aligned}

备注

不会真的有人用多项式求逆去求斐波那契数列吧。

代入求值倒是有些用途,比如这个东西,我在下面给出了一种生成函数代入求值的方法,可以说非常简便了。

卡特兰数C的生成函数

卡特兰数的第nn项是nn对括号匹配的方案数。

递推式

Cn=i=0n1CiCni1C_n=\sum_{i=0}^{n-1}C_{i}C_{n-i-1}

边界

C0=1C_0=1

通项式

Cn=C(2n,n)C(2n,n1)C_n=C(2n,n)-C(2n,n-1)

生成函数

G(x)=n=0Cnxn=1+n=1xni=0n1CiCni1=1+n=1xi=0n1CixiCni1xni1=1+x(i=0Cixi)2=1+xG(x)2=1±14x2x\begin{aligned} G(x)&=\sum_{n=0}^\infty C_nx^n\cr &=1+\sum_{n=1}^\infty x^n\sum_{i=0}^{n-1}C_{i}C_{n-i-1}\cr &=1+\sum_{n=1}^\infty x\sum_{i=0}^{n-1}C_{i}x^iC_{n-i-1}x^{n-i-1}\cr &=1+x(\sum_{i=0}^\infty C_ix^i)^2\cr &=1+xG(x)^2\cr &=\frac{1\pm\sqrt{1-4x}}{2x} \end{aligned}

这个函数应该是一个单调增函数,由此可以确定正负号那里应该取负号。

G(x)=114x2xG(x)=\frac{1-\sqrt{1-4x}}{2x}

备注

卡特兰数拥有简单的通项公式,所以也不用这个玩意去求原数列。它的代入求值可以解决一些概率和期望的问题。

组合数C(n,m)的第m列的生成函数

这里是对一个三角形数列的某一列求生成函数,存在递推关系。这里用GmG_m表示第mm列的生成函数。

递推式

C(n,m)=C(n1,m1)+C(n1,m)C(n,m)=C(n-1,m-1)+C(n-1,m)

边界

C(n,0)=1,n<mC(n,m)=0C(n,0)=1,n<m\Rightarrow C(n,m)=0

通项式

C(n,m)=n!m!(nm)!C(n,m)=\frac{n!}{m!(n-m)!}

生成函数

m=0m=0时可直接求出G0(x)=11xG_0(x)=\frac{1}{1-x}。当m>0m>0时:

Gm(x)=n=0C(n,m)xn=n=m(C(n1,m1)+C(n1,m))xn=xn=mC(n1,m1)xn1+xn=mC(n1,m)xn1=xGm1(x)+xGm(x)=x1xGm1(x)=xm(1x)m+1\begin{aligned} G_m(x)&=\sum_{n=0}^\infty C(n,m)x^n\cr &=\sum_{n=m}^\infty (C(n-1,m-1)+C(n-1,m))x^n\cr &=x\sum_{n=m}^\infty C(n-1,m-1)x^{n-1}+x\sum_{n=m}^\infty C(n-1,m)x^{n-1}\cr &=xG_{m-1}(x)+xG_m(x)\cr &=\frac{x}{1-x}G_{m-1}(x)\cr &=\frac{x^m}{(1-x)^{m+1}} \end{aligned}

第二类斯特林数S_2(n,m)的第m列的指数生成函数

第二类斯特林数是nn个元素划分成mm个集合的方案数。

数列aa的指数生成函数是数列bn=ann!b_n=\frac{a_n}{n!}的生成函数,我们用G^\hat{G}来表示它。

递推式

S2(n,m)=S2(n1,m1)+mS2(n1,m)S_2(n,m)=S_2(n-1,m-1)+mS_2(n-1,m)

边界

S2(n,0)=[n=0],n<mS2(n,m)=0S_2(n,0)=[n=0],n<m\Rightarrow S_2(n,m)=0

通项式

S2(n,m)=1m!i=0m(1)m+iC(m,i)inS_2(n,m)=\frac{1}{m!}\sum_{i=0}^m(-1)^{m+i}C(m,i)i^n

生成函数

m=0m=0时可直接求出G^0(x)=1\hat{G}_0(x)=1。当m>0m>0时:

G^m(x)=n=01n!S2(n,m)xn=n=m1n!(S2(n1,m1)+mS2(n1,m))xn=G^m1(x)dx+mG^m(x)dx+c=1m!(ex1)m\begin{aligned} \hat{G}_m(x)&=\sum_{n=0}^\infty \frac{1}{n!}S_2(n,m)x^n\cr &=\sum_{n=m}^\infty \frac{1}{n!}(S_2(n-1,m-1)+mS_2(n-1,m))x^n\cr &=\int \hat{G}_{m-1}(x)dx+m\int \hat{G}_{m}(x)dx+c\cr &=\frac{1}{m!}(e^x-1)^m \end{aligned}

这里省略了怎么解这个带积分的方程(其实我也不太会QAQ),可以代入结果检验是正确的。其中的积分常量cc可以根据G^(0)=0\hat{G}(0)=0确定。

备注

虽然第二类斯特林数有通项公式,但是不够简单。这回体现出用多项式全家桶求原数列的作用了,洛谷上还有模板题。看完这篇博客就可以去水黑题了,多好。

贝尔数B的指数生成函数

贝尔数是nn个元素划分成若干个集合的方案数。

递推式

B(n)=i=0n1C(n1,i)B(i)B(n)=\sum_{i=0}^{n-1}C(n-1,i)B(i)

边界

B(0)=1B(0)=1

生成函数

G^(x)=n=01n!B(n)xn=n=01n!xni=0n1C(n1,i)B(i)=n=01nxi=0n11i!B(i)xi1(ni1)!xni1=G^(x)exdx+c=eex1\begin{aligned} \hat{G}(x)&=\sum_{n=0}^\infty \frac{1}{n!}B(n)x^n\cr &=\sum_{n=0}^\infty \frac{1}{n!}x^n\sum_{i=0}^{n-1}C(n-1,i)B(i)\cr &=\sum_{n=0}^\infty \frac{1}{n}x\sum_{i=0}^{n-1}\frac{1}{i!}B(i)x^i\frac{1}{(n-i-1)!}x^{n-i-1}\cr &=\int \hat{G}(x)e^xdx+c\cr &=e^{e^x-1} \end{aligned}

这个积分方程可以两边求导然后凑出来解出G^(x)=eex+c\hat{G}(x)=e^{e^x+c},根据G^(0)=1\hat{G}(0)=1确定那个常数是1-1

备注

我们知道贝尔数就是第二类斯特林数一整行的和,因此我们可以把第二列斯特林数所有列的指数生成函数加起来得到贝尔数的指数生成函数:

G^(x)=m=01m!(ex1)m=eex1\hat{G}(x)=\sum_{m=0}^\infty \frac{1}{m!}(e^x-1)^m=e^{e^x-1}

得出的结果是一样的。

第一类斯特林数S_1(n,m)的第m列的指数生成函数

第一类斯特林数是nn个元素组成成mm个环排列的方案数。

递推式

S1(n,m)=S1(n1,m1)+(n1)S1(n1,m)S_1(n,m)=S_1(n-1,m-1)+(n-1)S_1(n-1,m)

边界

S1(n,0)=[n=0],n<mS1(n,m)=0S_1(n,0)=[n=0],n<m\Rightarrow S_1(n,m)=0

生成函数

m=0m=0时可直接求出G^0(x)=1\hat{G}_0(x)=1。当m>0m>0时:

G^m(x)=n=01n!S1(n,m)xn=n=m1n!(S1(n1,m1)+(n1)S1(n1,m))xn=G^m1(x)dx+mn=m1n!nS1(n,m)xndx+c=G^m1(x)dx+xG^m(x)dx+c=1m!ln(11x)m\begin{aligned} \hat{G}_m(x)&=\sum_{n=0}^\infty \frac{1}{n!}S_1(n,m)x^n\cr &=\sum_{n=m}^\infty \frac{1}{n!}(S_1(n-1,m-1)+(n-1)S_1(n-1,m))x^n\cr &=\int \hat{G}_{m-1}(x)dx+m\int \sum_{n=m}^\infty \frac{1}{n!}nS_1(n,m)x^ndx+c\cr &=\int \hat{G}_{m-1}(x)dx+\int x\hat{G}_{m}'(x)dx+c\cr &=\frac{1}{m!}\ln(\frac{1}{1-x})^m \end{aligned}

这个积分方程可以两边求导,移项,再积分,得到

G^m(x)=G^m1(x)1xdx+c\hat{G}_m(x)=\int \frac{\hat{G}_{m-1}(x)}{1-x}dx+c

会积分就能归纳出结果,积分常量根据G^(0)=0\hat{G}(0)=0确定。然而我不会积分,可以代入验证结果是正确的。

备注

又可以去水另一道模板题了,真好。

第一类斯特林数一行的和就是nn的阶乘,所以把所有列的指数生成函数加起来我们就能得到数列an=n!a_n=n!的指数生成函数,也就是an=1a_n=1的生成函数:

G^(x)=m=01m!ln(11x)m=eln(11x)=11x\hat{G}(x)=\sum_{m=0}^\infty \frac{1}{m!}\ln(\frac{1}{1-x})^m=e^{\ln(\frac{1}{1-x})}=\frac{1}{1-x}

和预期的结果一样,这进一步验证了我们推出的指数生成函数应该是正确的。

完全二分图匹配数T(n,m)的第m列的指数生成函数

T(n,m)T(n,m)是两侧分别有nnmm个点的完全二分图的匹配个数。

递推式

T(n,m)=mT(n1,m1)+T(n1,m)T(n,m)=mT(n-1,m-1)+T(n-1,m)

边界

T(n,0)=T(0,m)=1T(n,0)=T(0,m)=1

通项式

T(n,m)=i=0min(n,m)C(n,i)C(m,i)i!T(n,m)=\sum_{i=0}^{\min(n,m)}C(n,i)C(m,i)i!

生成函数

m=0m=0时可直接求出G^0(x)=ex\hat{G}_0(x)=e^x。当m>0m>0时:

G^m(x)=n=01n!T(n,m)xn=n=m1n!(mT(n1,m1)+T(n1,m))xn=mG^m1(x)dx+G^m(x)dx+c=(x+1)mex\begin{aligned} \hat{G}_m(x)&=\sum_{n=0}^\infty \frac{1}{n!}T(n,m)x^n\cr &=\sum_{n=m}^\infty \frac{1}{n!}(mT(n-1,m-1)+T(n-1,m))x^n\cr &=m\int \hat{G}_{m-1}(x)dx+\int \hat{G}_{m}(x)dx+c\cr &=(x+1)^me^x \end{aligned}

一个表格

递推式形如A(n,m)=pA(n1,m1)+qA(n1,m)A(n,m)=pA(n-1,m-1)+qA(n-1,m)的三角形第mm列的指数型生成函数:

数列 pp qq G^m=\hat{G}_m= G^0\hat{G}_0 G^m(0),m>0\hat{G}_m(0),m>0 封闭形式
组合数 11 11 G^m1(x)dx+G^m(x)dx+c\int \hat{G}_{m-1}(x)dx+\int \hat{G}_{m}(x)dx+c exe^x 00 1m!xmex\frac{1}{m!}x^me^x
第一类斯特林数 11 n1n-1 G^m1(x)dx+xG^m(x)G^m(x)dx+c\int \hat{G}_{m-1}(x)dx+x\hat{G}_{m}(x)-\int \hat{G}_{m}(x)dx+c 11 00 1m!ln(11x)m\frac{1}{m!}\ln(\frac{1}{1-x})^m
第二类斯特林数 11 mm G^m1(x)dx+mG^m(x)dx+c\int \hat{G}_{m-1}(x)dx+m\int \hat{G}_{m}(x)dx+c 11 00 1m!(ex1)m\frac{1}{m!}(e^x-1)^m
欧拉数 nmn-m m+1m+1 xG^m1(x)mG^m1(x)dx+(m+1)G^m(x)dx+cx\hat{G}_{m-1}(x)-m\int \hat{G}_{m-1}(x)dx+(m+1)\int \hat{G}_{m}(x)dx+c ex1e^x-1 00 推不出来。
完全二分图匹配数 mm 11 mG^m1(x)dx+G^m(x)dx+cm\int \hat{G}_{m-1}(x)dx+\int \hat{G}_{m}(x)dx+c exe^x 11 (x+1)mex(x+1)^me^x

写了这么老些又臭又长的式子,不知道会不会有笔误,哪里出错了还请指出。